<?php
class ChineseSpell {
	/**
	  * @var array $chineseSpellList 拼音编码对应表
	  * @access private
	  */
	var $chineseSpellList = array(
	'a'=>-20319,
	'ai'=>-20317,
	'an'=>-20304,
	'ang'=>-20295,
	'ao'=>-20292,
	'ba'=>-20283,
	'bai'=>-20265,
	'ban'=>-20257,
	'bang'=>-20242,
	'bao'=>-20230,
	'bei'=>-20051,
	'ben'=>-20036,
	'beng'=>-20032,
	'bi'=>-20026,
	'bian'=>-20002,
	'biao'=>-19990,
	'bie'=>-19986,
	'bin'=>-19982,
	'bing'=>-19976,
	'bo'=>-19805,
	'bu'=>-19784,
	'ca'=>-19775,
	'cai'=>-19774,
	'can'=>-19763,
	'cang'=>-19756,
	'cao'=>-19751,
	'ce'=>-19746,
	'ceng'=>-19741,
	'cha'=>-19739,
	'chai'=>-19728,
	'chan'=>-19725,
	'chang'=>-19715,
	'chao'=>-19540,
	'che'=>-19531,
	'chen'=>-19525,
	'cheng'=>-19515,
	'chi'=>-19500,
	'chong'=>-19484,
	'chou'=>-19479,
	'chu'=>-19467,
	'chuai'=>-19289,
	'chuan'=>-19288,
	'chuang'=>-19281,
	'chui'=>-19275,
	'chun'=>-19270,
	'chuo'=>-19263,
	'ci'=>-19261,
	'cong'=>-19249,
	'cou'=>-19243,
	'cu'=>-19242,
	'cuan'=>-19238,
	'cui'=>-19235,
	'cun'=>-19227,
	'cuo'=>-19224,
	'da'=>-19218,
	'dai'=>-19212,
	'dan'=>-19038,
	'dang'=>-19023,
	'dao'=>-19018,
	'de'=>-19006,
	'deng'=>-19003,
	'di'=>-18996,
	'dian'=>-18977,
	'diao'=>-18961,
	'die'=>-18952,
	'ding'=>-18783,
	'diu'=>-18774,
	'dong'=>-18773,
	'dou'=>-18763,
	'du'=>-18756,
	'duan'=>-18741,
	'dui'=>-18735,
	'dun'=>-18731,
	'duo'=>-18722,
	'e'=>-18710,
	'en'=>-18697,
	'er'=>-18696,
	'fa'=>-18526,
	'fan'=>-18518,
	'fang'=>-18501,
	'fei'=>-18490,
	'fen'=>-18478,
	'feng'=>-18463,
	'fo'=>-18448,
	'fou'=>-18447,
	'fu'=>-18446,
	'ga'=>-18239,
	'gai'=>-18237,
	'gan'=>-18231,
	'gang'=>-18220,
	'gao'=>-18211,
	'ge'=>-18201,
	'gei'=>-18184,
	'gen'=>-18183,
	'geng'=>-18181,
	'gong'=>-18012,
	'gou'=>-17997,
	'gu'=>-17988,
	'gua'=>-17970,
	'guai'=>-17964,
	'guan'=>-17961,
	'guang'=>-17950,
	'gui'=>-17947,
	'gun'=>-17931,
	'guo'=>-17928,
	'ha'=>-17922,
	'hai'=>-17759,
	'han'=>-17752,
	'hang'=>-17733,
	'hao'=>-17730,
	'he'=>-17721,
	'hei'=>-17703,
	'hen'=>-17701,
	'heng'=>-17697,
	'hong'=>-17692,
	'hou'=>-17683,
	'hu'=>-17676,
	'hua'=>-17496,
	'huai'=>-17487,
	'huan'=>-17482,
	'huang'=>-17468,
	'hui'=>-17454,
	'hun'=>-17433,
	'huo'=>-17427,
	'ji'=>-17417,
	'jia'=>-17202,
	'jian'=>-17185,
	'jiang'=>-16983,
	'jiao'=>-16970,
	'jie'=>-16942,
	'jin'=>-16915,
	'jing'=>-16733,
	'jiong'=>-16708,
	'jiu'=>-16706,
	'ju'=>-16689,
	'juan'=>-16664,
	'jue'=>-16657,
	'jun'=>-16647,
	'ka'=>-16474,
	'kai'=>-16470,
	'kan'=>-16465,
	'kang'=>-16459,
	'kao'=>-16452,
	'ke'=>-16448,
	'ken'=>-16433,
	'keng'=>-16429,
	'kong'=>-16427,
	'kou'=>-16423,
	'ku'=>-16419,
	'kua'=>-16412,
	'kuai'=>-16407,
	'kuan'=>-16403,
	'kuang'=>-16401,
	'kui'=>-16393,
	'kun'=>-16220,
	'kuo'=>-16216,
	'la'=>-16212,
	'lai'=>-16205,
	'lan'=>-16202,
	'lang'=>-16187,
	'lao'=>-16180,
	'le'=>-16171,
	'lei'=>-16169,
	'leng'=>-16158,
	'li'=>-16155,
	'lia'=>-15959,
	'lian'=>-15958,
	'liang'=>-15944,
	'liao'=>-15933,
	'lie'=>-15920,
	'lin'=>-15915,
	'ling'=>-15903,
	'liu'=>-15889,
	'long'=>-15878,
	'lou'=>-15707,
	'lu'=>-15701,
	'lv'=>-15681,
	'luan'=>-15667,
	'lue'=>-15661,
	'lun'=>-15659,
	'luo'=>-15652,
	'ma'=>-15640,
	'mai'=>-15631,
	'man'=>-15625,
	'mang'=>-15454,
	'mao'=>-15448,
	'me'=>-15436,
	'mei'=>-15435,
	'men'=>-15419,
	'meng'=>-15416,
	'mi'=>-15408,
	'mian'=>-15394,
	'miao'=>-15385,
	'mie'=>-15377,
	'min'=>-15375,
	'ming'=>-15369,
	'miu'=>-15363,
	'mo'=>-15362,
	'mou'=>-15183,
	'mu'=>-15180,
	'na'=>-15165,
	'nai'=>-15158,
	'nan'=>-15153,
	'nang'=>-15150,
	'nao'=>-15149,
	'ne'=>-15144,
	'nei'=>-15143,
	'nen'=>-15141,
	'neng'=>-15140,
	'ni'=>-15139,
	'nian'=>-15128,
	'niang'=>-15121,
	'niao'=>-15119,
	'nie'=>-15117,
	'nin'=>-15110,
	'ning'=>-15109,
	'niu'=>-14941,
	'nong'=>-14937,
	'nu'=>-14933,
	'nv'=>-14930,
	'nuan'=>-14929,
	'nue'=>-14928,
	'nuo'=>-14926,
	'o'=>-14922,
	'ou'=>-14921,
	'pa'=>-14914,
	'pai'=>-14908,
	'pan'=>-14902,
	'pang'=>-14894,
	'pao'=>-14889,
	'pei'=>-14882,
	'pen'=>-14873,
	'peng'=>-14871,
	'pi'=>-14857,
	'pian'=>-14678,
	'piao'=>-14674,
	'pie'=>-14670,
	'pin'=>-14668,
	'ping'=>-14663,
	'po'=>-14654,
	'pu'=>-14645,
	'qi'=>-14630,
	'qia'=>-14594,
	'qian'=>-14429,
	'qiang'=>-14407,
	'qiao'=>-14399,
	'qie'=>-14384,
	'qin'=>-14379,
	'qing'=>-14368,
	'qiong'=>-14355,
	'qiu'=>-14353,
	'qu'=>-14345,
	'quan'=>-14170,
	'que'=>-14159,
	'qun'=>-14151,
	'ran'=>-14149,
	'rang'=>-14145,
	'rao'=>-14140,
	're'=>-14137,
	'ren'=>-14135,
	'reng'=>-14125,
	'ri'=>-14123,
	'rong'=>-14122,
	'rou'=>-14112,
	'ru'=>-14109,
	'ruan'=>-14099,
	'rui'=>-14097,
	'run'=>-14094,
	'ruo'=>-14092,
	'sa'=>-14090,
	'sai'=>-14087,
	'san'=>-14083,
	'sang'=>-13917,
	'sao'=>-13914,
	'se'=>-13910,
	'sen'=>-13907,
	'seng'=>-13906,
	'sha'=>-13905,
	'shai'=>-13896,
	'shan'=>-13894,
	'shang'=>-13878,
	'shao'=>-13870,
	'she'=>-13859,
	'shen'=>-13847,
	'sheng'=>-13831,
	'shi'=>-13658,
	'shou'=>-13611,
	'shu'=>-13601,
	'shua'=>-13406,
	'shuai'=>-13404,
	'shuan'=>-13400,
	'shuang'=>-13398,
	'shui'=>-13395,
	'shun'=>-13391,
	'shuo'=>-13387,
	'si'=>-13383,
	'song'=>-13367,
	'sou'=>-13359,
	'su'=>-13356,
	'suan'=>-13343,
	'sui'=>-13340,
	'sun'=>-13329,
	'suo'=>-13326,
	'ta'=>-13318,
	'tai'=>-13147,
	'tan'=>-13138,
	'tang'=>-13120,
	'tao'=>-13107,
	'te'=>-13096,
	'teng'=>-13095,
	'ti'=>-13091,
	'tian'=>-13076,
	'tiao'=>-13068,
	'tie'=>-13063,
	'ting'=>-13060,
	'tong'=>-12888,
	'tou'=>-12875,
	'tu'=>-12871,
	'tuan'=>-12860,
	'tui'=>-12858,
	'tun'=>-12852,
	'tuo'=>-12849,
	'wa'=>-12838,
	'wai'=>-12831,
	'wan'=>-12829,
	'wang'=>-12812,
	'wei'=>-12802,
	'wen'=>-12607,
	'weng'=>-12597,
	'wo'=>-12594,
	'wu'=>-12585,
	'xi'=>-12556,
	'xia'=>-12359,
	'xian'=>-12346,
	'xiang'=>-12320,
	'xiao'=>-12300,
	'xie'=>-12120,
	'xin'=>-12099,
	'xing'=>-12089,
	'xiong'=>-12074,
	'xiu'=>-12067,
	'xu'=>-12058,
	'xuan'=>-12039,
	'xue'=>-11867,
	'xun'=>-11861,
	'ya'=>-11847,
	'yan'=>-11831,
	'yang'=>-11798,
	'yao'=>-11781,
	'ye'=>-11604,
	'yi'=>-11589,
	'yin'=>-11536,
	'ying'=>-11358,
	'yo'=>-11340,
	'yong'=>-11339,
	'you'=>-11324,
	'yu'=>-11303,
	'yuan'=>-11097,
	'yue'=>-11077,
	'yun'=>-11067,
	'za'=>-11055,
	'zai'=>-11052,
	'zan'=>-11045,
	'zang'=>-11041,
	'zao'=>-11038,
	'ze'=>-11024,
	'zei'=>-11020,
	'zen'=>-11019,
	'zeng'=>-11018,
	'zha'=>-11014,
	'zhai'=>-10838,
	'zhan'=>-10832,
	'zhang'=>-10815,
	'zhao'=>-10800,
	'zhe'=>-10790,
	'zhen'=>-10780,
	'zheng'=>-10764,
	'zhi'=>-10587,
	'zhong'=>-10544,
	'zhou'=>-10533,
	'zhu'=>-10519,
	'zhua'=>-10331,
	'zhuai'=>-10329,
	'zhuan'=>-10328,
	'zhuang'=>-10322,
	'zhui'=>-10315,
	'zhun'=>-10309,
	'zhuo'=>-10307,
	'zi'=>-10296,
	'zong'=>-10281,
	'zou'=>-10274,
	'zu'=>-10270,
	'zuan'=>-10262,
	'zui'=>-10260,
	'zun'=>-10256,
	'zuo'=>-10254
	);

	/**
	  * 取汉字所有拼音
	  * @param string $chinese 要转换的汉字
	  * @param string $delimiter 分隔符
	  * @param int $length 返回的长度
	  * @return string
	  */
	function getFullSpell($chinese, $delimiter = ' ', $length = 0) {
		$spell = $this->getChineseSpells($chinese, $delimiter);
		if ($length) {
			$spell = substr($spell, 0, $length);
		}
		return $spell;
	}

	/**
	  * 取汉字第一个拼音
	  * @param string $chinese 要转换的汉字
	  * @param int $length 返回的长度
	  * @return string
	  */
	function getFirstSpell($chinese, $length = 0) {
		$spell = $this->getChineseSpells($chinese, ' ', 1);
		if ($length) {
			$spell = substr($spell, 0, $length);
		}
		return $spell;
	}
	/**
	  * 取一个汉字码对应的拼音
	  * @param int $num 汉字码
	  * @param string $blank 空白字符
	  * @return string
	  */
	function getChineseSpell ($num, $blank = '') {
		if ( $num>0 && $num<160 ) {
			return chr($num);
		} elseif ($num<-20319||$num>-10247) {
			return $blank;
		} else {
			foreach ($this->chineseSpellList as $spell => $code) {
				if ($code > $num) break;
				$result = $spell;
			}
			return $result;
		}
	}
	/**
	  * 取汉字拼音
	  * @param string $chinese 要转换的汉字
	  * @param string $delimiter 分隔符
	  * @param int $first 是否只返回第一个
	  * @return string
	  */
	function getChineseSpells($chinese, $delimiter = ' ', $first=0)
	{
		$result = array();
		for ($i=0; $i<strlen($chinese); $i++) {
			$p = ord(substr($chinese,$i,1));
			if ($p>160) {
				$q = ord(substr($chinese,++$i,1));
				$p = $p*256 + $q - 65536;
			}
			$result[] = $this->getChineseSpell($p);
			if ($first) {
				return $result[0];
			}
		}
		return implode($delimiter, $result);
	}
}
?>